      1  import java.awt.FlowLayout;

      2  import java.awt.GridLayout;

      3  import java.awt.event.ActionEvent;

      4  import java.awt.event.ActionListener;

      5  import java.sql.SQLException;

      6  import javax.swing.JButton;

      7  import javax.swing.JFrame;

      8  import javax.swing.JOptionPane;

      9  import javax.swing.JPanel;

     10  import javax.swing.JTextArea;

     11

     12  /**

     13     A frame displaying the components of an ATM.

     14  */

     15  public class ATMFrame extends JFrame

     16  {

     17     private static final int FRAME_WIDTH = 300;

     18     private static final int FRAME_HEIGHT = 300;

     19

     20     private JButton aButton;

     21     private JButton bButton;

     22     private JButton cButton;

     23

     24     private KeyPad pad;

     25     private JTextArea display;

     26

     27     private ATM theATM;

     28

     29     /**

     30        Constructs the user interface of the ATM frame.

     31     */

     32     public ATMFrame(ATM anATM)

     33     {

     34        theATM = anATM;

     35

     36        // Construct components

     37

     38        pad = new KeyPad();

     39

     40        display = new JTextArea(4, 20);

     41

     42        aButton = new JButton("  A  ");

     43        aButton.addActionListener(new AButtonListener());

     44

     45        bButton = new JButton("  B  ");

     46        bButton.addActionListener(new BButtonListener());

     47

     48        cButton = new JButton("  C  ");

     49        cButton.addActionListener(new CButtonListener());

     50

     51        // Add components

     52

     53        JPanel buttonPanel = new JPanel();

     54        buttonPanel.add(aButton);

     55        buttonPanel.add(bButton);

     56        buttonPanel.add(cButton);

     57

     58        setLayout(new FlowLayout());

     59        add(pad);

     60        add(display);

     61        add(buttonPanel);

     62        showState();

     63

     64        setSize(FRAME_WIDTH, FRAME_HEIGHT);

     65     }

     66

     67     /**

     68        Updates display message.

     69     */

     70     public void showState()

     71     {

     72        int state = theATM.getState();

     73        pad.clear();

     74        if (state == ATM.START)

     75        {

     76           display.setText("Enter customer number\nA = OK");

     77        }

     78        else if (state == ATM.PIN)

     79        {

     80           display.setText("Enter PIN\nA = OK");

     81        }

     82        else if (state == ATM.ACCOUNT)

     83        {

     84           display.setText("Select Account\n"

     85                 + "A = Checking\nB = Savings\nC = Exit");

     86        }

     87        else if (state == ATM.TRANSACT)

     88        {

     89           try

     90           {

     91              display.setText("Balance = "

     92                    + theATM.getBalance()

     93                    + "\nEnter amount and select transaction\n"

     94                    + "A = Withdraw\nB = Deposit\nC = Cancel");

     95           }

     96           catch (SQLException exception)

     97           {

     98              JOptionPane.showMessageDialog(null,

     99                    "Database error");

    100           }

    101        }

    102     }

    103

    104     class AButtonListener implements ActionListener

    105     {

    106        public void actionPerformed(ActionEvent event)

    107        {

    108           int state = theATM.getState();

    109           if (state == ATM.START)

    110           {

    111              theATM.setCustomerNumber((int) pad.getValue());

    112           }

    113           else if (state == ATM.PIN)

    114           {

    115              try

    116              {

    117                 theATM.selectCustomer((int) pad.getValue());

    118              }

    119              catch (SQLException exception)

    120              {

    121                 JOptionPane.showMessageDialog(null,

    122                       "Database error");

    123              }

    124           }

    125           else if (state == ATM.ACCOUNT)

    126           {

    127              theATM.selectAccount(ATM.CHECKING);

    128           }

    129           else if (state == ATM.TRANSACT)

    130           {

    131              try

    132              {

    133                 theATM.withdraw(pad.getValue());

    134              }

    135              catch (SQLException exception)

    136              {

    137                 JOptionPane.showMessageDialog(null,

    138                       "Database error");

    139              }

    140              theATM.back();

    141           }

    142           showState();

    143        }

    144     }

    145

    146     class BButtonListener implements ActionListener

    147     {

    148        public void actionPerformed(ActionEvent event)

    149        {

    150           int state = theATM.getState();

    151           if (state == ATM.ACCOUNT)

    152           {

    153              theATM.selectAccount(ATM.SAVINGS);

    154           }

    155           else if (state == ATM.TRANSACT)

    156           {

    157              try

    158              {

    159                 theATM.deposit(pad.getValue());

    160              }

    161              catch (SQLException exception)

    162              {

    163                 JOptionPane.showMessageDialog(null,

    164                       "Database error");

    165              }

    166              theATM.back();

    167           }

    168           showState();

    169        }

    170     }

    171

    172     class CButtonListener implements ActionListener

    173     {

    174        public void actionPerformed(ActionEvent event)

    175        {

    176           int state = theATM.getState();

    177           if (state == ATM.ACCOUNT)

    178           {

    179              theATM.reset();

    180           }

    181           else if (state == ATM.TRANSACT)

    182           {

    183              theATM.back();

    184           }

    185           showState();

    186        }

    187     }

    188  }